package br.com.advocacia.faces;

import java.util.ArrayList;
import java.util.List;

import javax.faces.bean.ManagedBean;
import javax.faces.bean.ManagedProperty;
import javax.faces.bean.ViewScoped;

import br.com.advocacia.entidade.TipoCompromisso;
import br.com.advocacia.logica.contract.DefaultLogicaContract;
import br.com.advocacia.util.FacesUtil;
import br.com.advocacia.util.StringUtil;

@ManagedBean(name="tipoCompromissoFaces")
@ViewScoped
public class TipoCompromissoFaces extends FacesUtil {
	
	private static final long serialVersionUID = -7977605925364598025L;

	@ManagedProperty(value = "#{logicaDefault}")
	private DefaultLogicaContract<TipoCompromisso> logicaTipoCompromisso;
	
	private TipoCompromisso tipoCompromisso = new TipoCompromisso();
	private List<TipoCompromisso> listaTipoCompromisso = new ArrayList<>();
	private String tipoCompromissoBusca;

	
	public void adicionar() {
		try {
			if (validaCampos()) {
				logicaTipoCompromisso.adicionar(tipoCompromisso);
				adicionarMensagem("Tipo de Compromisso adicionado com sucesso");
				this.buscarTipoCompromisso();
				fecharModal("dialogTipoCompromisso");
			} else {
				return;
			}
			
		} catch (Exception e) {
			adicionarMensagem("Houve um erro ao adicionar o Tipo de Compromisso");
		}
	}
	
	public void prepararAdicionar() {
		this.tipoCompromisso = new TipoCompromisso();
		abrirModal("dialogTipoCompromisso");
	}
	
	public void selecionarRegistro(Long idArea, boolean editar) {
		try {
			this.tipoCompromisso = logicaTipoCompromisso.obterPorId(TipoCompromisso.class,idArea);
			
			if (editar) {
				abrirModal("dialogTipoCompromisso");
			} else {
				abrirModal("dialogExcluir");
			}
			
		} catch (Exception e) {
			e.printStackTrace();
		}
	}
	
	public void editar() {
		try {
			if (validaCampos()) {
				logicaTipoCompromisso.editar(this.tipoCompromisso);
				adicionarMensagem("Tipo de Compromisso editado com sucesso");
				fecharModal("dialogTipoCompromisso");
				this.buscarTipoCompromisso();
			} else {
				return;
			}
			
		} catch (Exception e) {
			adicionarMensagem("Houve um erro ao editar o Tipo de Compromisso");
		}
	}
	
	public void remover() {
		try {
			logicaTipoCompromisso.remover(TipoCompromisso.class, this.tipoCompromisso.getId());
			adicionarMensagem("Tipo de Compromisso removido com sucesso");
			fecharModal("dialogExcluir");
			this.buscarTipoCompromisso();
		} catch (Exception e) {
			adicionarMensagem("Houve um erro ao remover o Tipo de Compromisso");
		}
	}
	
	public void buscarTipoCompromisso() {
		if (listaTipoCompromisso != null) {
			this.listaTipoCompromisso.clear();
		}
		
		try {
			if (!StringUtil.textoPreenchido(tipoCompromissoBusca)) {
				this.listaTipoCompromisso =  logicaTipoCompromisso.buscarTodos(TipoCompromisso.class, "tipoCompromisso");
			} else {
				this.listaTipoCompromisso = logicaTipoCompromisso.buscarPorCampo(TipoCompromisso.class, "tipoCompromisso", tipoCompromissoBusca);
			}
		} catch (Exception e) {
			adicionarMensagem("Houve um erro ao buscar as informações");
		}
	}
	
	public boolean validaCampos() {
		boolean valido = true;
		
		if (!StringUtil.textoPreenchido(this.tipoCompromisso.getTipoCompromisso())) {
			adicionarMensagem("O campo Tipo de Compromisso é obrigatório");
			valido = false;
		}
		return valido;
	}
	
	public void setlogicaTipoCompromisso(DefaultLogicaContract<TipoCompromisso> logicaTipoCompromisso) {
		this.logicaTipoCompromisso = logicaTipoCompromisso;
	}

	public List<TipoCompromisso> getListaTipoCompromisso() {
		return listaTipoCompromisso;
	}

	public void setListaTipoCompromisso(List<TipoCompromisso> listaTipoCompromisso) {
		this.listaTipoCompromisso = listaTipoCompromisso;
	}

	public String getTipoCompromissoBusca() {
		return tipoCompromissoBusca;
	}

	public void setTipoCompromissoBusca(String TipoCompromissoBusca) {
		this.tipoCompromissoBusca = TipoCompromissoBusca;
	}

	public TipoCompromisso getTipoCompromisso() {
		return tipoCompromisso;
	}

	public void setTipoCompromisso(TipoCompromisso TipoCompromisso) {
		this.tipoCompromisso = TipoCompromisso;
	}
	
	
}